/*
class Fiber
{
public:

	typedef std::shared_ptr<Fiber> ptr;
	Fiber(std::function<void()> cbs, size_t stacksize = 0, bool use_caller = false)
	{
		cb = cbs;
	}
	void fun()
	{
		cout << "fun" << endl;
		cb();
	}
	/// 通过functional的方式  调用了 Scheduler的方法  本类中没有出现 Scheduler的任何信息
	function<void()> cb;

};

class  Scheduler
{
public:
	void idle()
	{
		cout << "idel" << endl;
	}
	void ptrtest()
	{
		Fiber::ptr idle_fiber(new Fiber(std::bind(&Scheduler::idle, this)));

		idle_fiber->fun();
	}

};

*/



class Fiber
{
public:

	typedef std::shared_ptr<Fiber> ptr;
	Fiber( void (*cbs)(), size_t stacksize = 0, bool use_caller = false)
	{
		cb = cbs;
	}
	void fun()
	{
		cout << "fun" << endl;
		cb();
	}
	/// 不能 只通过函数指针的方式进行调用    还需要传递this指针的信息
	void (*cb)();
//	void (Scheduler::*cb)();  // cdecl call方式

};
void sss()
{
}
class  Scheduler
{
public:
	void idle()
	{
		cout << "idel" << endl;
	}
	void ptrtest()
	{
		Fiber::ptr idle_fiber(new Fiber(&Scheduler::idle));     //this_call 方式
		idle_fiber->fun();
	}
};
